
import java.util.Date;
import java.text.SimpleDateFormat;

class AgenteIntegracaoController {

    def springSecurityService

    def index = {}

    def list = {
        filtro();
        params.max = Math.min(params.max ? params.int('max') : 10, 100)
        [agenteIntegracaoInstanceList: AgenteIntegracao.list(params), agenteIntegracaoInstanceTotal: AgenteIntegracao.count()]
    }

    def create = {
        def agenteIntegracaoInstance = new AgenteIntegracao()
        agenteIntegracaoInstance.properties = params
        return [agenteIntegracaoInstance: agenteIntegracaoInstance]
    }

    def save = {
        Date data = new Date();
        SimpleDateFormat formatador = new SimpleDateFormat('yyyy/MM/dd hh:MM:ss');

        def agenteIntegracaoInstance = new AgenteIntegracao(params)
        agenteIntegracaoInstance.password       = springSecurityService.encodePassword(params.password);
        agenteIntegracaoInstance.status         = 1;
        agenteIntegracaoInstance.dtCadastro     = Date.parse('yyyy/MM/dd hh:MM:ss',formatador.format(data));
        agenteIntegracaoInstance.dtUAcesso      = Date.parse('yyyy/MM/dd hh:MM:ss',formatador.format(data));
        agenteIntegracaoInstance.dtUAtualizacao = Date.parse('yyyy/MM/dd hh:MM:ss',formatador.format(data));

        if (agenteIntegracaoInstance.save(flush: true)) {
            redirect(action: "edit", id: agenteIntegracaoInstance.id);
        }
        else {
            render(view: "create", model: [agenteIntegracaoInstance: agenteIntegracaoInstance])
        }
    }

    def show = {
        filtro();
        def agenteIntegracaoInstance = AgenteIntegracao.get(params.id)
        if (!agenteIntegracaoInstance) {
            flash.message = "Agente Integrador não encontrado!"
            redirect(action: "list")
        }
        else {
            [agenteIntegracaoInstance: agenteIntegracaoInstance]
        }
    }

    def edit = {
        filtro();
        int totalEndereco    = 0;
        int totalContato     = 0;
        int totalConvenio    = 0;
        int totalResponsavel = 0;

        println("Id:" + params.id);

        def agenteIntegracaoInstance = AgenteIntegracao.get(params.id)
        if (!agenteIntegracaoInstance) {
            agenteIntegracaoInstance = new AgenteIntegracao();
        }
        // CONVÊNIOS.
        // Carrega os dados para a alteração do convênio.
        def convenioDadosInstance = '';
        if(params.convenio != null){
            convenioDadosInstance = Convenio.findById(params.convenio);
        }else{
            convenioDadosInstance = new Convenio();
        }
        // Carrega os convênios cadastrados.
        def convenioInstance    = Convenio.findAllByColaborador(agenteIntegracaoInstance);
        if (convenioInstance != null){
            totalContato = convenioInstance.count();
        }else{
            convenioInstance    = new Convenio();
        }

        // RESPONSÁVEL.
        // Carrega os dados para a alteração do responsável.
        def responsavelDadosInstance = '';
        if(params.responsavel != null){
            responsavelDadosInstance = Responsavel.findById(params.responsavel);
        }else{
            responsavelDadosInstance = new Responsavel();
        }
        // Carrega os responsáveis cadastrados.
        def responsavelInstance   = Responsavel.findAllByColaborador(agenteIntegracaoInstance);
        if (responsavelInstance != null){
            totalResponsavel = responsavelInstance.count();
        }else{
            responsavelInstance   = new Responsavel();
        }

        // ENDEREÇOS.
        // Carrega os dados para a alteração do endereço.
        def enderecoDadosInstance = '';
        if(params.endereco != null){
            enderecoDadosInstance = Endereco.findById(params.endereco);
        }else{
            enderecoDadosInstance = new Endereco();
        }
        // Carrega os endereços cadastrados.
        def enderecoInstance   = Endereco.findAllByPessoa(agenteIntegracaoInstance);
        if (enderecoInstance != null){
            totalEndereco = enderecoInstance.count();
        }else{
            enderecoInstance   = new Endereco();
        }

        // CONTATOS.
        // Carrega os dados para a alteração do contato.
        def contatoDadosInstance = '';
        if(params.contato != null){
            contatoDadosInstance = Contato.findById(params.contato);
        }else{
            contatoDadosInstance = new Contato();
        }
        // Carrega os contados cadastrados.
        def contatoInstance = Contato.findAllByPessoa(agenteIntegracaoInstance);
        if (contatoInstance != null){
            totalContato = contatoInstance.count();
        }else{
            contatoInstance    = new Contato();
        }

        // Verifica se a instituição existe e manda os dados para a tela.
        if (agenteIntegracaoInstance != null){
            return [agenteIntegracaoInstance : agenteIntegracaoInstance,
                    convenioInstance         : convenioDadosInstance,
                    convenioInstanceList     : convenioInstance,
                    convenioInstanceTotal    : totalConvenio,
                    responsavelInstance      : responsavelDadosInstance,
                    responsavelInstanceList  : responsavelInstance,
                    responsavelInstanceTotal : totalResponsavel,
                    enderecoInstance         : enderecoDadosInstance,
                    enderecoInstanceList     : enderecoInstance,
                    enderecoInstanceTotal    : totalEndereco,
                    contatoInstance          : contatoDadosInstance,
                    contatoInstanceList      : contatoInstance,
                    contatoInstanceTotal     : totalContato];
        } else {
            flash.message="Agente Integrador não encontrado!";
            redirect(action: "create");
        }
    }

    def update = {
        def agenteIntegracaoInstance        = AgenteIntegracao.get(params.id)
        agenteIntegracaoInstance.password   = springSecurityService.encodePassword(params.password)
        agenteIntegracaoInstance.properties = params;

        if (agenteIntegracaoInstance.save()) {
            flash.message="Agente Integrador alterado com sucesso!";
            redirect(action: "edit", id: agenteIntegracaoInstance.id);
        } else {
            flash.message = "Não foi possível alterar o Agente Integrador!"
            redirect(action: "list")
        }
    }

    def filtro = {
        if(!session["pessoa"]){
            flash.message = "Você precisa estar logado para acessar esta página.";
            redirect(uri:'/');
        }
    }
}
